#include "xege.h"

namespace xege {
	// 设置前景色
	void IMAGE_BASE::setFGColor (color_t C) {
		FGColor = C;
		setColor (FG, C);
	}
	// 设置背景色
	void IMAGE_BASE::setBGColor (color_t C) {
		BGColor = C;
		setColor (BG, C);
	}
	// 获取前景色
	color_t IMAGE_BASE::getFGColor   (void) { return FGColor; }
	// 获取背景色
	color_t IMAGE_BASE::getBGcolor   (void) { return BGColor; }
	// 获取前景色（struct）
	COLOR   IMAGE_BASE::getFGColorS  (void) {   return FG;    }
	// 获取背景色（struct）
	COLOR   IMAGE_BASE::getBGColorS  (void) {   return BG;    }
	// COLOR   getFGColorSF (void) {   return FGF;   }
	// COLOR   getBGColorSF (void) {   return BGF;   }
	
	// 设置原点坐标（POINT）
	void  IMAGE_BASE::setOffset (POINT p) { offset = p; }
	// 设置原点坐标（POINT）
	void  IMAGE_BASE::setOrigin (POINT p) { offset = p; }

	// 设置原点坐标（x，y）
	void  IMAGE_BASE::setOffset (int x, int y) { offset = {x, y}; }
	// 设置原点坐标（x，y）
	void  IMAGE_BASE::setOrigin (int x, int y) { offset = {x, y}; }

	// 得到当前原点坐标（POINT）
	POINT IMAGE_BASE::getOffset ( void  ) { return offset; }
	
	// 获取 surface
	/* const  */SDL_Surface*  IMAGE_BASE::getSurface  (void) { return sPic; }
	// 获取 renderer
	/* const  */SDL_Renderer* IMAGE_BASE::getRenderer (void) { return rPic; }
	// 获取 texture
	/* const  */SDL_Texture*  IMAGE_BASE::getTexture  (void) { return tPic; }

	// 获取 (P)IMAGE 宽
	uint IMAGE_BASE::getWidth  (void) { return w; }
	// 获取 (P)IMAGE 高
	uint IMAGE_BASE::getHeight (void) { return h; }


	// 获取全部像素点
	const color_t* IMAGE_BASE::getBuffer (void) { return (color_t*)(sPic -> pixels); }
	// 获取像素点颜色
	const color_t IMAGE_BASE::getPixel (int x, int y) {
		int nx = x + offset.x, ny = y + offset.y;
		if (nx < 0 || ny < 0 || nx >= w || ny >= h) return 0x00000000;
		else return *((color_t*)sPic -> pixels + y * w + x);
	}
	// const color_t getPR (uint x, uint y) { return *((color_t*)rPic -> pixels + y * w + x); }
	// 设置像素点颜色
	void IMAGE_BASE::setPixel (int x, int y, color_t C) {
		int nx = x + offset.x, ny = y + offset.y;
		if (nx >= 0 && ny >= 0 && nx < w && ny < h) {
			*((color_t*)sPic -> pixels + y * w + x) = C;
		} else {
			/* out of surface!! error! */
		}
	}

	IMAGE_BASE::IMAGE_BASE () {
		setFGColor (0xffffffff);
		setBGColor (0x000000ff);
		offset = {0, 0}; 
	}
	IMAGE_BASE::~IMAGE_BASE () {
		// SDL_FreeSurface     (sPic);
		// 实在不是很懂这个是用来干什么的,加上就会出异常
		SDL_DestroyRenderer (rPic);
		SDL_DestroyTexture  (tPic);
	}
	// 用 color_t 设置 COLOR 颜色
	void IMAGE_BASE::setColor (COLOR &CC, color_t C) {
		CC.r = XEGEGET_R (C);
		CC.g = XEGEGET_G (C);
		CC.b = XEGEGET_B (C);
		CC.a = XEGEGET_A (C);
	}
}  // 命名空间 xege 结尾
